package juanca.mole;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import ClasesExtras.GetIpAddress;
import ClasesExtras.ManejadorCampos;
import ClasesExtras.handlerAlertMessage;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;

public class InicioSesionCalidad extends Activity {

	private String IdEmpleado;
	private String PasswEmpleado;
	private String datosEmpleado;

	private EditText etIdeIniSesCalidad;
	private EditText etPasswIniSesCalidad;
	private ManejadorCampos manejador;
	private handlerAlertMessage manejadorMensajes;
	private Activity activity;
	private String URL_VALIDAR_USUARIO;
	public InicioSesionCalidad self = this;
	public ProgressDialog progressDialog;
	private static final String CNV = "cnv";
	private static final String PNV = "pnv";
	private static final String no_permiso = "no_permiso";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_inicio_sesion_calidad);

		etIdeIniSesCalidad = (EditText) findViewById(R.id.etIdeIniSesCalidad);
		etPasswIniSesCalidad = (EditText) findViewById(R.id.etPasswIniSesCalidad);
		manejadorMensajes = new handlerAlertMessage();
		manejador = new ManejadorCampos();
		activity = this;

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {

			URL_VALIDAR_USUARIO = direccion.getDireccion() + "/validar.json";

		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	/**
	 * @return the datosEmpleado
	 */
	public String getDatosEmpleado() {
		return datosEmpleado;
	}

	/**
	 * @param datosEmpleado
	 *            the datosEmpleado to set
	 */
	public void setDatosEmpleado(String datosEmpleado) {
		this.datosEmpleado = datosEmpleado;
	}

	/**
	 * @return the passwEmpleado
	 */
	public String getPasswEmpleado() {
		return PasswEmpleado;
	}

	/**
	 * @param passwEmpleado
	 *            the passwEmpleado to set
	 */
	public void setPasswEmpleado(String passwEmpleado) {
		PasswEmpleado = passwEmpleado;
	}

	/**
	 * @return the idEmpleado
	 */
	public String getIdEmpleado() {
		return IdEmpleado;
	}

	/**
	 * @param idEmpleado
	 *            the idEmpleado to set
	 */
	public void setIdEmpleado(String idEmpleado) {
		IdEmpleado = idEmpleado;
	}

	// metodo para que calidad inicie sesión
	public void iniciarSesionCal(View v) {
		int identificacion = manejador.identificacion(etIdeIniSesCalidad);
		int contrasena = manejador.contrasena(etPasswIniSesCalidad);

		if (identificacion != 0) {
			switch (identificacion) {
			case 8:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjIdenVacio,
						R.string.btnAceptar);
				break;
			case 9:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjIdenNumer,
						R.string.btnAceptar);

				break;

			case 10:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjIdenEspac,
						R.string.btnAceptar);
				break;
			}
		} else {
			if (contrasena != 0) {
				switch (contrasena) {
				case 11:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjContraVacio,
							R.string.btnAceptar);
					break;
				case 12:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjContraMaxmin,
							R.string.btnAceptar);
					break;
				}
			} else {

				this.setIdEmpleado(etIdeIniSesCalidad.getText().toString());
				this.setPasswEmpleado(etPasswIniSesCalidad.getText().toString());
				progressDialog = new ProgressDialog(self);
				progressDialog.setMessage(self
						.getString(R.string.PbMsjVerificando));
				progressDialog.setCancelable(true);
				progressDialog.show();

				new Thread(new Runnable() {
					@Override
					public void run() {
						Log.i("InicioSesion", "entra enviar Usuario");
						self.validarUsuario();

					}
				}).start();

			}
		}

	}

	/* Metodo que valida a calidad */
	public void validarUsuario() {

		String ced = this.getIdEmpleado();
		String pass = this.getPasswEmpleado();
		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_VALIDAR_USUARIO);// operarios
		post.setHeader("content-type", "application/json");

		try {

			JSONObject dato = new JSONObject();
			dato.put("cedula", ced);// cedula del operario
			dato.put("password", pass);// contrasena del operario
			dato.put("formulario", "sesion_calidad");// permisos
			StringEntity entity = new StringEntity(dato.toString());
			post.setHeader("Content-Type", "application/json; chartset=UTF-8");
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			final String respStr = EntityUtils.toString(resp.getEntity());
			this.setDatosEmpleado(respStr);
			Log.i("InicioSesion", respStr.toString());

			if (this.getDatosEmpleado().equals(CNV)) {
				// mensaje codigo no valido.
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCedulaIncorrecta,
								R.string.btnAceptar);

					}
				});
			} else {
				if (this.getDatosEmpleado().equals(PNV)) {
					// mensaje password no valido.
					runOnUiThread(new Runnable() {
						public void run() {
							progressDialog.dismiss();
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjPasswordIncorrecta,
									R.string.btnAceptar);

						}
					});
				} else {
					if (this.getDatosEmpleado().equals(no_permiso)) {
						// mensaje no tiene permisos.
						runOnUiThread(new Runnable() {
							public void run() {
								progressDialog.dismiss();
								manejadorMensajes.alertMessageOneButton(
										activity, R.string.tituloAlerta,
										R.string.msjSinPermisos,
										R.string.btnAceptar);

							}
						});
					} else {
						// convertir datosEmpelados a JSON

						JSONArray jsonArray = new JSONArray(
								this.getDatosEmpleado());
						Log.i("InicioSesion",
								"El json es: " + jsonArray.toString());
						JSONObject objet = new JSONObject();
						objet = jsonArray.getJSONObject(0);
						final String codigoVerifica = objet.getString("codigo");
						Log.i("InicioSesion", "El codigo de verificacion es: "
								+ codigoVerifica.toString());

						// inicia la actividad de calidad y envia por parametro
						// el codigo de verificacion
						runOnUiThread(new Runnable() {
							@Override
							public void run() {
								progressDialog.dismiss();
								Intent i = new Intent();
								i.setClass(self, Calidad.class);
								i.putExtra("codigo_verifica", codigoVerifica);
								self.startActivity(i);
							}
						});

					}
				}
			}

		} catch (Exception e) {
			Log.e("InicioSesion", "Error en: "
					+ e.fillInStackTrace().toString());

			runOnUiThread(new Runnable() {
				public void run() {

					progressDialog.dismiss();
					new AlertDialog.Builder(self)
							.setIcon(android.R.drawable.ic_dialog_alert)
							.setTitle(R.string.tituloError)
							.setMessage(R.string.msjERInicarSesionCal)
							.setPositiveButton(R.string.btnAceptar, null)
							.show();

				}
			});

		}

	}

	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK) {

			// Salir
			Intent intent = new Intent();
			intent.setClass(activity, Etapas.class);
			startActivity(intent);
			return true;

		}
		// para las demas cosas, se reenvia el evento al listener habitual
		return super.onKeyUp(keyCode, event);
	}
}
